{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "import dml.data as D\n",
    "import numpy as np\n",
    "import pandas as pd\n",
    "import matplotlib.pyplot as plt\n",
    "import random\n",
    "import seaborn\n",
    "import sklearn.metrics as M\n",
    "import sklearn.neighbors as N\n",
    "\n",
    "seaborn.set()\n",
    "\n",
    "%matplotlib inline"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "num_train = 50000\n",
    "num_valid = 5000"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "train = pd.read_json(\"/media/ejhumphrey/workspace/icml-dml/datasets/train.json\")\n",
    "valid = pd.read_json(\"/media/ejhumphrey/workspace/icml-dml/datasets/valid.json\")\n",
    "test = pd.read_json(\"/media/ejhumphrey/workspace/icml-dml/datasets/test.json\")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "# Instrument embedding\n",
    "inst_full = pd.read_json(\n",
    "    \"/media/ejhumphrey/workspace/icml-dml/embeddings/\"\n",
    "    \"instrument-000-050000-20160611_18h21m39s/output_index.json\")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "x_train, y_train = D.sample_embeddings(inst_full.loc[train.index], num_train)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "x_valid, y_valid = D.sample_embeddings(inst_full.loc[valid.index], num_valid)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 59,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "knn_inst = N.KNeighborsClassifier(75).fit(x_train, y_train.instrument)\n",
    "num_inst_classes = len(knn_inst.classes_)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Train: 0.4803\tValid: 0.4506\n"
     ]
    }
   ],
   "source": [
    "print(\"Train: {:.4f}\\tValid: {:.4f}\".format(\n",
    "        knn_inst.score(x_train, y_train.instrument),\n",
    "        knn_inst.score(x_valid, y_valid.instrument)))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 39,
   "metadata": {
    "collapsed": false
   },
   "outputs": [],
   "source": [
    "train_confmat = M.confusion_matrix(y_train.instrument, knn_inst.predict(x_train))\n",
    "norm = 1.*train_confmat.sum(axis=0, keepdims=True)\n",
    "norm[norm == 0] = 1.0"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 60,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "data": {
      "image/png": "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\nu/QplmHr1q2Nx87OzqbGT09PNx57MMXJZF7PmdcQ5ONkMuNPPvnkxmPHuc/NN9/ceOxRRx3FLbfc\n0nj8fe9738Zjs8fczH6elYlkqrnPpMlELK1atSo1HrqNCFqptmemJEmSKthMSZIkVbCZkiRJqmAz\nJUmSVMFmSpIkqYLNlCRJUgWbKUmSpAo2U5IkSRX2uTpYRBwFvBPYMRz/MWBTKeX1EfFKYBvwf3Yb\n82ullG92NmtJkqSeaHJm6izgylLK44EXAlcDZ0XECcBpwOtHjGm+XK0kSdIEm9rXMuoRcTxwGfAh\n4H2llE9HxCnA+4Anl1L+ftSYfT3wrl27FrMRJJIkSQfC4uIiUyvkyeyzmQKIiAXgicCLgIuBXcAf\nAC8vpbx71JhSyjv3VnPLli2pcLOFhQW2bNnSaGw2m296ejqV/ZPJ8ZmZmWHHjh2Nx2cbzEwO1TjZ\nfE23S9fZfF3Wzs4js83HyRTMzGfTpk2Nx65bt46NGzc2Hr9mzZrGY7vOoOyTTB7e7OxsanzTYxzA\nIYccwp133pmaS0bmmAv5bL5vfrP5lSCZbL7sMbfLDMpMFibkt/n8/HzjsX065maen+xrCHL5hmNk\n8408qDe5ZuoZwFdLKR+KiFuBs4HjgROBKyLiw8Av7Dbm6QyuoZIkSfqR1qR9+xfgLRFxJ7CTwXVW\nry+l3BwRbwTOAy4C/nzZmBd0NWFJkqQ+2WczVUr5J+CRK3zvbcDbhv8cOUaSJOlH2eReuCBJktQD\nNlOSJEkVbKYkSZIq2ExJkiRVsJmSJEmqYDMlSZJUwWZKkiSpQqM4mS4sJh84s+R7dun5ubk5tm3b\n1nh8Zqn6bMxGVpf1+xSbkhmb3SZdz31Sa0/qNs/WzkpGT/Rmm3cZJwWk5pKNCLnkkksajz377LO5\n6KKLGo9/9rOf3Xhs37Z5JpYpuy9mnp/se2gmTmbNmjXcddddjcfDIJanqTGisEYeYDwzJUmSVMFm\nSpIkqYLNlCRJUgWbKUmSpAo2U5IkSRVspiRJkip00kxFxBld1JUkSeqb1pupiDgGeGbbdSVJkvqo\n+eqTQEQcBbwT2DG878eATaWU10fEK4a3PwZ4eES8spTyh21PWJIkqU+yZ6bOAq4spTweeCFwNXBW\nRJwAPBl4HXABcI2NlCRJOhhkm6krgWdFxAXAQinlWuAVwCeB/1lKab4OviRJ0o+AdDZfRCwATwRe\n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\nqvD/AGSqZ5o8sYS6AAAAAElFTkSuQmCC\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0xa8da234c>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "fig, ax = plt.subplots(1, 1, figsize=(10, 10))\n",
    "ax.imshow(train_confmat / norm, vmin=0, vmax=1.0, \n",
    "          aspect='equal', interpolation='nearest')\n",
    "ax.set_yticks(range(num_inst_classes))\n",
    "ax.set_yticklabels(knn_inst.classes_)\n",
    "ax.set_xticks(range(num_inst_classes))\n",
    "ax.set_xticklabels(knn_inst.classes_);"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 68,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "data": {
      "image/png": "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\nYII=\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0xa732fb0c>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "fig, ax = plt.subplots(1, 1, figsize=(14, 6))\n",
    "ax.bar(range(num_inst_classes), \n",
    "       (train_confmat / norm)[[range(num_inst_classes)]*2])\n",
    "ax.set_xticks(np.arange(len(knn_inst.classes_))+0.45)\n",
    "ax.set_xticklabels(knn_inst.classes_)\n",
    "ax.set_ylim(0, 1)\n",
    "ax.set_xlim(0, num_inst_classes);"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 21,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Train: 0.1491\tValid: 0.0692\n"
     ]
    }
   ],
   "source": [
    "knn_pitch = N.KNeighborsClassifier(75).fit(x_train, y_train.note_number)\n",
    "print(\"Train: {:.4f}\\tValid: {:.4f}\".format(\n",
    "        knn_pitch.score(x_train, y_train.note_number),\n",
    "        knn_pitch.score(x_valid, y_valid.note_number)))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 44,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "train_pitch_confmat = M.confusion_matrix(y_train.note_number, knn_pitch.predict(x_train))\n",
    "pitch_norm = 1.*train_pitch_confmat.sum(axis=0, keepdims=True)\n",
    "pitch_norm[pitch_norm == 0] = 1.0"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 45,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<matplotlib.image.AxesImage at 0xa9d8d1cc>"
      ]
     },
     "execution_count": 45,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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\nBAAAYNRIOQJJAx/k0qVLyXULCwvJdammwdPT08lt1tfXk+tSjW+95QhWVlZ6P8/Nzenq1as7js+T\nap/bptPp39s595xyDYBTc57bpn6s6enp3n48c557vqntUvMgSU8//XRy3S233NJ3ea6cQu6cqKaE\ndzqd3vnYllT23Ujdr5Zl2Ho8yL68SpQZqfLOnadsSWmlGz+3gfd8ST0v7/kCv1QD7K3HhVGOAAAA\nYBgETgAAAEYETgAAAEYETgAAAEYETgAAAEYETgAAAEatLUfgPlDi+Wyl/ffjKVUwOzs72MD6qHaA\nX11dTf6/XNq8J/3SU8Jg1Cnu9bTSQfeXW+eZo1SJBUk6c+ZM3+WpMgU7qY7PMg9S+VTxtpUjqL43\nRiH1nLzz4BmrdX8l5qLtz9ejyXO2tL1azmEMUY4AAABgGAROAAAARgROAAAARgROAAAARgROAAAA\nRo1k1V25cmXbQQ4cOKArV65ISmen5RrvzszMDDyGXJZULqsu1bg1l/2Qy4qqrpuZmell0+Wek3V/\n1vGVzpDzbFNfN2yTX8/rkcu28zTvPHv2bHKbI0eOmPZXzaor3ZDUu03p194yhnp24W5k9o16f6Wz\n6jxZZns5i2uUmYzW7fZyZh9MyKoDAAAYBoETAACAEYETAACAEYETAACAEYETAACAEYETAACA0a43\n+U2VCciVCGiSJ83Yk8qeKnuQ22anY6V40v1HrZp+7kn9bTKVOLUuV/IiV6rgpptu6v08NTXVOxdK\npLJbt/HwnOeSLY181OUIShvlnFfLEZROfy89r96yL6WV/r3WVJPktp/nY4hyBAAAAMMgcAIAADAi\ncAIAADAicAIAADDq7PQfQggHJP2BpOOSZiX9qqTPS3pY3cDrlKR7YozpuwIBAAD2AcsVp++X9NkY\n412SfkzSuyXdL+l3Yox3SvqqpHtHNkIAAICW2PGKU4zxDysPv0HS1yXdKelNm8sekfRWSQ96BnDp\n0qW+y3Pd5HNSKdK5dH9Pmuz6+vrA20jb002tacalyxukxu5N90+NITfuetrt5ORkb8yp7XKpuqkS\nC7n9eVPmPanES0tLyXXnzp3r/Xzs2LHe48OHDye38ZwTTaY6lyhtUZ3n1NhHWRJhkG1yx/Lsr7pu\namqq9zw9x/GOwSP3WVq6lEKTSp8v2Nt2DJy2hBD+UtJJda9AfbLy1dxpSSdGMDYAAIBWMf/5EmN8\n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\nVLNjqdnm557PpFw5jVSpAmu5CWsTbE9j5dKNmvc4yhEAAAAMg8AJAADAiMAJAADAiMAJAADAKH23\n3qYQwp2SPiTpH9S9UervJf26pIfVDbxOSbonxpi+KxAAAGAfsF5x+vMY4ytijN8TY/xZSfdLek+M\n8U5JX5V078hGCAAA0BI7XnHaVE/Ju0vSmzZ/fkTSWyU9WGhMGLHdLDuQ2mbYbt+5MXg6peeUTu2u\njt06D57UeC9PeQNPSnM93br6uqVS2XPd5D3d7r1zbnlOddWSA3UXL17s/XzkyJHe48XFxeQ2OanU\n+KmpqeQ2ubGn5iJXcsCjfpz6eyUlNXZvuYTU/M3MzCS38cids/XXauucs5QlQFnWs/yFIYSPSjqq\n7tWm+cpXc6clnRjF4AAAANrE8if3lyW9I8b4Q5JeL+m92h5wlb18AQAA0FIDVw4PIfyNpG9T96rT\nSgjh5ZLeEmP80cxmu1+6GQAAwK7vhSFLVt1PSPrmGOMvhxBukXSLpN+X9FpJH5B0t6RHCw4UA2iq\nfYpnDINsU20hkLpfxHvvThvucbKOvToPTd7j5DmWdwyW+4Gmp6e33Y/iucfJc59V7pwY9r6tutyc\n1+9xOnfunKT8PU65/aXmKXePk+f1ze0vJzVP1edUbT1TX2fdX5P3OOXOzVTLldz5kprb0i1SaLmy\nM8s9Th+T9MEQwv9S96u9fyPp85LeH0J4o6SvSXpodEMEAABoh0aa/G5sbGw7iOXqAv6Z5y+/Jud1\nv1z1qmpy7J4Goh7e/ZUeX2p/1b9061cXBt2XV5ONkK1XozqdTu+Kx9mzZ5PbLC0tmfZnWb7TutTY\nc88pd0XHclW43ti2dNZkTuqKU+45ea5eWq/UVrNvPc2Ec2Pgd/I2NPkFAAAYBoETAACAEYETAACA\nEYETAACAEYETAACAEYETAACAUSPlCETl8B2Vfh2aTKf38DT59aaKW4rrDWKU5Req8+DV0HvaXaDT\nwpp6niu46ElXz/GcY979VeevWo4gN+6tIpn9HDx4cOAx5OY2VUgyl57vKT6ZK4qam4vUa+8d3+zs\n7I7jq8uNb9iistVyHd4ipqnXPlfeoHQT5z2AcgQAAADDIHACAAAwInACAAAwInACAAAwInACAAAw\nInACAAAwaqQcwdra2raDVNNKc92bC48hua70GJpM5/Sk2qde873cFbt0V/vS2jC+psoUeFXHVy9H\n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\nYII=\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0xa9e690cc>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "fig, ax = plt.subplots(1, 1, figsize=(10, 10))\n",
    "ax.imshow(train_pitch_confmat / pitch_norm, vmin=0, vmax=1.0, \n",
    "          aspect='equal', interpolation='nearest')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 70,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "data": {
      "image/png": "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\nPUm+Ej1fuqp6UpI/SfKuJP8ter40VfXyJJ/MrN/bkvxxkhui50tVVT+X5C1Jvp/kHUnuiJ4vTVX9\nYpI3ZXYzqG1JXpjkR6PnS1NVT0nyb5Ock+SvZrY//z/pqOejXYGpqiuSXDz/zZhrknxorPfeSqpq\nZ5IP5OjbWb8ryW+11l6eZH+SX9yI2jarqroyyfPn2/aPJ/lgZj3/l3q+NH83yR+11q5M8jNJ9kXP\nx/L2JN+ZP7ZvWb4/bK29srX2itbam6PnS1VV52YWWi7P7KchfjJ6vlSttY/Ot+9XJnlnkn8TPV+2\nn09y57znP53kxnT2HTrmELKrktycJK21O5OcXVW7Rnz/reJ7SV6b5NtrXrsyyafnjz+d5FUj17TZ\n/Y/MdgBJ8t0kT8nstuO3zF/T8wVrrf1ua+3986fPSvLN6PnSVVUlqST/ObMzpS+PfcuybTvm+ZXR\n82V6VZLPtdYeaa19u7X2y9HzMb0jybuj58t2T5KnzR+fm+RwOvsOHXMI2flJ1g4Zu3f+2tdGrGHT\na609luQvZscZP/CUNZcB70lyweiFbWLznj8yf/oPMju4e42eL19V3ZbkwsyuyHxOz5fu/Zn9Ftgv\nzJ/btyzfj1bVzZkdZLwryU49X6o9SZ5SVZ9KcnaSfxY9H0VVvSjJN1pr91SVfcsStdY+WVU/X1Vf\nTXJWZie+P91TzzdyEv+xZ5UYh74vSVX9RGaXXP9Rju6zni9Ja+0lSV6f5N9Hz5eqqt6U5L+31r5x\nglX0fPG+muT61tpPZjbk47dz9IlHPV+8bZmFxTdkFtQ/FvuWsVyT2dzGY+n5gs3neX2ztXZJZiOk\n/tUxq0y+52MGmEOZXXF53DMymyTE8j1YVU+cP74ws8+CBaqq1yR5a5Ifa609GD1fqqp6YVU9M0la\na3+c2c0T9Hy5Xpvkp6vqS5ldaXx7kof0fHlaa4daa5+cPz6Q5P8mOUfPl+rbSb7YWnts3nP78/Fc\nmeSL88d6vlwvSfJfkqS1dkdmPX64p56PGWBuTfLGJKmqS5Pc3Vp7eMT338r+a5Kfmj/+qSR/sIG1\nbDpV9dQk70vyutbaA/OX9Xy5XpbkV5Okqp6eZFdmPX/jfLmeL1hr7e+11l7cWvvbST6S2XAmPV+i\nqvrZqnrn/PF5Sc7L7IqAni/PrUleWVXbquppsW8ZRVVdkOTB1tqj85d8hy7X1zK7K3Cq6tlJHkry\nuXS0nW87cuTIaG9WVe/NbJLQapJr56mPBaqqF2d2cLGS5NEk9yV5TWZ39Xhikq8n+YXW2uqGFbnJ\nVNUvZXbnlLsyu+x6JMnVmQ330PMlmN/K97eTPDPJk5Jcn+TLmd0CUs+XbH5Q/aeZncHT8yWZ3+jm\n45kNaXpCZvMxvpLZ7U/1fEnm+/RrMtuXvzuz+bu28yWan9h+d2vttfPn58d2vjTz2yh/NLOfItie\n5NeTtHTU81EDDAAAwJnYyEn8AAAAp0SAAQAAuiHAAAAA3RBgAACAbggwAABANwQYAACgGwIMAADQ\nDQEGAADoxv8HdE9VuC0crEQAAAAASUVORK5CYII=\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x8f6789ac>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "num_pitches = len(train_pitch_confmat)\n",
    "\n",
    "fig, ax = plt.subplots(1, 1, figsize=(14, 6))\n",
    "ax.bar(range(num_pitches), \n",
    "       (train_pitch_confmat / pitch_norm)[[range(num_pitches)]*2])\n",
    "# ax.set_xticks(np.arange(len(knn_inst.classes_))+0.45)\n",
    "# ax.set_xticklabels(knn_inst.classes_)\n",
    "ax.set_ylim(0, 1)\n",
    "ax.set_xlim(0, num_pitches);"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 46,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "# Instrument embedding\n",
    "pitch_full = pd.read_json(\n",
    "    \"/media/ejhumphrey/workspace/icml-dml/embeddings/\"\n",
    "    \"pitch-000-050000-20160611_21h02m48s/output_index.json\")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 17,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "def do_the_thing(dframe, train, valid, num_train, num_valid):\n",
    "    num_inst_classes = len(train.instrument.unique())\n",
    "    num_pitches = len(train.note_number.unique())\n",
    "    \n",
    "    x_train, y_train = D.sample_embeddings(dframe.loc[train.index], num_train)\n",
    "    x_valid, y_valid = D.sample_embeddings(dframe.loc[valid.index], num_valid)\n",
    "    \n",
    "    knn_inst = N.KNeighborsClassifier(75).fit(x_train, y_train.instrument)\n",
    "    print(\"Instrument!\\nTrain: {:.4f}\\tValid: {:.4f}\".format(\n",
    "        knn_inst.score(x_train, y_train.instrument),\n",
    "        knn_inst.score(x_valid, y_valid.instrument)))\n",
    "    \n",
    "    inst_confmat = M.confusion_matrix(y_valid.instrument, knn_inst.predict(x_valid))\n",
    "    inst_norm = 1.*inst_confmat.sum(axis=0, keepdims=True)\n",
    "    inst_norm[inst_norm == 0] = 1.0\n",
    "\n",
    "    fig, ax = plt.subplots(1, 1, figsize=(14, 4))\n",
    "    ax.bar(range(num_inst_classes), \n",
    "           (inst_confmat / inst_norm)[[range(num_inst_classes)]*2])\n",
    "    ax.set_xticks(np.arange(len(knn_inst.classes_))+0.45)\n",
    "    ax.set_xticklabels(knn_inst.classes_)\n",
    "    ax.set_ylim(0, 1)\n",
    "    ax.set_xlim(0, num_inst_classes);\n",
    "    ax.set_xlabel(\"Instrument Class\")\n",
    "    ax.set_ylabel(\"Accuracy\")\n",
    "    \n",
    "    knn_pitch = N.KNeighborsClassifier(75).fit(x_train, y_train.note_number)\n",
    "    print(\"Pitch!\\nTrain: {:.4f}\\tValid: {:.4f}\".format(\n",
    "            knn_pitch.score(x_train, y_train.note_number),\n",
    "            knn_pitch.score(x_valid, y_valid.note_number)))\n",
    "    \n",
    "    pitch_confmat = M.confusion_matrix(y_valid.note_number, knn_pitch.predict(x_valid))\n",
    "    pitch_norm = 1.*pitch_confmat.sum(axis=0, keepdims=True)\n",
    "    pitch_norm[pitch_norm == 0] = 1.0\n",
    "\n",
    "    num_pitches = pitch_confmat.shape[0]\n",
    "#     print(pitch_confmat.shape)\n",
    "\n",
    "    fig, ax = plt.subplots(1, 1, figsize=(14, 4))\n",
    "    ax.bar(range(num_pitches), \n",
    "           (pitch_confmat / pitch_norm)[[range(num_pitches)]*2])\n",
    "    ax.set_ylim(0, 1)\n",
    "    ax.set_xlim(0, num_pitches);\n",
    "    ax.set_xlabel(\"Pitch (semitones)\")\n",
    "    ax.set_ylabel(\"Accuracy\")\n",
    "    "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 18,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Instrument!\n",
      "Train: 0.4755\tValid: 0.4481\n",
      "Pitch!\n",
      "Train: 0.1444\tValid: 0.0760\n"
     ]
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x98ec8eac>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "image/png": "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\nP+hkAAAAAElFTkSuQmCC\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x9ebeea6c>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "# Instrument embedding\n",
    "inst_full = pd.read_json(\n",
    "    \"/media/ejhumphrey/workspace/icml-dml/embeddings/\"\n",
    "    \"instrument-000-050000-20160611_18h21m39s/output_index.json\")\n",
    "\n",
    "do_the_thing(inst_full, train, test, 100000, 50000)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 19,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Instrument!\n",
      "Train: 0.2567\tValid: 0.1812\n",
      "Pitch!\n",
      "Train: 0.6423\tValid: 0.6242\n"
     ]
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0xa1bd6a8c>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "image/png": "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\nrkJggg==\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x9eccdccc>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "# Pitch embedding\n",
    "pitch_full = pd.read_json(\n",
    "    \"/media/ejhumphrey/workspace/icml-dml/embeddings/\"\n",
    "    \"pitch-000-050000-20160611_21h02m48s/output_index.json\")\n",
    "\n",
    "do_the_thing(pitch_full, train, test, 100000, 50000)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 20,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Instrument!\n",
      "Train: 0.3484\tValid: 0.2876\n",
      "Pitch!\n",
      "Train: 0.6087\tValid: 0.5851\n"
     ]
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x8627a62c>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "image/png": "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\nhf8P9Hac3fhF0q4AAAAASUVORK5CYII=\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x9cd2ca2c>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "# Instrument-pitch embedding\n",
    "instpitch_full = pd.read_json(\n",
    "    \"/media/ejhumphrey/workspace/icml-dml/embeddings/\"\n",
    "    \"instpitch-000-050000-20160611_23h46m35s/output_index.json\")\n",
    "\n",
    "do_the_thing(instpitch_full, train, test, 100000, 50000)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 21,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Instrument!\n",
      "Train: 0.4211\tValid: 0.3876\n",
      "Pitch!\n",
      "Train: 0.3920\tValid: 0.3469\n"
     ]
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x98e0264c>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "image/png": "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\nSa3w/wEtVg+7kb+xwAAAAABJRU5ErkJggg==\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x9ebee40c>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "# Instrument-pitch-d2 embedding\n",
    "instpitch_d2_full = pd.read_json(\n",
    "    \"/media/ejhumphrey/workspace/icml-dml/embeddings/\"\n",
    "    \"instpitch-d2-000-050000-20160612_02h32m03s/output_index.json\")\n",
    "\n",
    "do_the_thing(instpitch_d2_full, train, test, 100000, 50000)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 86,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "x_train, y_train = D.sample_embeddings(instpitch_full.loc[train.index], 100000)\n",
    "x_test, y_test = D.sample_embeddings(instpitch_full.loc[test.index], 50000)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 148,
   "metadata": {
    "collapsed": false
   },
   "outputs": [],
   "source": [
    "inst_classes = sorted(y_test.instrument.unique())\n",
    "class_map = {k: n for n, k in enumerate(inst_classes)}\n",
    "y_train['instrument_idx'] = [class_map[c] for c in y_train.instrument]\n",
    "y_test['instrument_idx'] = [class_map[c] for c in y_test.instrument]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 105,
   "metadata": {
    "collapsed": false
   },
   "outputs": [],
   "source": [
    "x_vectors = []\n",
    "for n in range(10000):\n",
    "    vi_idx = random.choice(y_test[(y_test.instrument == 'trc') & (y_test.note_number == 48)].index)\n",
    "    vc_idx = random.choice(y_test[(y_test.instrument == 'ho') & (y_test.note_number == 48)].index)\n",
    "    trc_idx = random.choice(y_test[(y_test.instrument == 'klb') & (y_test.note_number == 48)].index)\n",
    "    x_vectors.append(x_test[vc_idx] - x_test[vi_idx] + x_test[trc_idx])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 152,
   "metadata": {
    "collapsed": false
   },
   "outputs": [],
   "source": [
    "knn = N.KNeighborsClassifier(75).fit(x_train, y_train.instrument_idx)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 157,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "(array([1313, 1106,  816,  767,  762]), array([u'ho', u'bp', u'tp', u'kb', u'bt'], \n",
      "      dtype='<U3'))\n"
     ]
    }
   ],
   "source": [
    "x_vectors = []\n",
    "for n in range(10000):\n",
    "    a1_idx = random.choice(y_test[(y_test.instrument_idx == class_map['sxt'])].index)\n",
    "    a0_idx = random.choice(y_test[(y_test.instrument_idx == class_map['sxs'])].index)\n",
    "    b0_idx = random.choice(y_test[(y_test.instrument_idx == class_map['ho'])].index)\n",
    "    x_vectors.append(x_test[a1_idx] - x_test[a0_idx] + x_test[b0_idx])\n",
    "\n",
    "counts = np.bincount(knn.predict(np.asarray(x_vectors)).astype(np.int32))\n",
    "idx = counts.argsort()[:-6:-1]\n",
    "print(counts[idx], np.array(inst_classes)[idx])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 158,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "# bp -- bass trombone\n",
    "# tp -- tenor trombone\n",
    "# kb -- bass\n",
    "# bt -- bass trumpet"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 167,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "(array([1011,  947,  818,  746,  685]), array([u'pt', u'eg', u'vi', u'ob', u'vc'], \n",
      "      dtype='<U3'))\n"
     ]
    }
   ],
   "source": [
    "x_vectors = []\n",
    "for n in range(10000):\n",
    "    a1_idx = random.choice(y_test[(y_test.instrument_idx == class_map['sxt'])].index)\n",
    "    a0_idx = random.choice(y_test[(y_test.instrument_idx == class_map['vc'])].index)\n",
    "    b0_idx = random.choice(y_test[(y_test.instrument_idx == class_map['vi'])].index)\n",
    "    x_vectors.append(x_test[a1_idx] - x_test[a0_idx] + x_test[b0_idx])\n",
    "\n",
    "counts = np.bincount(knn.predict(np.asarray(x_vectors)).astype(np.int32))\n",
    "idx = counts.argsort()[:-6:-1]\n",
    "print(counts[idx], np.array(inst_classes)[idx])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "#\n",
    "#\n",
    "#"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 156,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "(array([1332, 1078,  861,  844,  747]), array([u'ho', u'bp', u'tp', u'bt', u'kb'], \n",
      "      dtype='<U3'))\n"
     ]
    }
   ],
   "source": [
    "counts = np.bincount(knn.predict(np.asarray(x_vectors)).astype(np.int32))\n",
    "idx = counts.argsort()[:-6:-1]\n",
    "print(counts[idx], np.array(inst_classes)[idx])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 130,
   "metadata": {
    "collapsed": false
   },
   "outputs": [],
   "source": [
    "knn = N.KNeighborsClassifier(75).fit(x_train, y_train.note_number)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 171,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "(array([3397, 2471, 1214,  723,  443]), array([20, 11, 12,  4, 23]))\n"
     ]
    }
   ],
   "source": [
    "x_vectors = []\n",
    "for n in range(10000):\n",
    "    a1_idx = random.choice(y_test[(y_test.note_number == 60) & (y_test.instrument_idx == class_map['ho'])].index)\n",
    "    a0_idx = random.choice(y_test[(y_test.note_number == 55) & (y_test.instrument_idx == class_map['ho'])].index)\n",
    "    b0_idx = random.choice(y_test[(y_test.note_number == 40) & (y_test.instrument_idx == class_map['ho'])].index)\n",
    "    x_vectors.append(x_test[a1_idx] - x_test[a0_idx] + x_test[b0_idx])\n",
    "\n",
    "counts = np.bincount(knn.predict(np.asarray(x_vectors)).astype(np.int32))\n",
    "idx = counts.argsort()[:-6:-1]\n",
    "print(counts[idx], idx)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 2",
   "language": "python",
   "name": "python2"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 2
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython2",
   "version": "2.7.6"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 0
}
